import random
from datetime import datetime, timedelta

import pandas as pd  # 导入pandas库，用于读取Excel文件和处理数据
import mysql.connector  # 导入MySQL Connector/Python库，用于连接MySQL数据库


def is_working_day(date):
    # 判断日期是否为周末
    if date.weekday() >= 5:  # 5和6分别代表周六和周日
        return False

    # 判断日期是否为法定节假日
    # 这里可以根据实际需求添加法定节假日的判断逻辑
    # 如果存在特定的法定节假日列表，可以在此处进行判断

    # 如果以上条件都不满足，则认为是法定工作日
    return True


def insert_excel_data_to_mysql(filename, host, user, password, database, table,stat_date):
    # 连接数据库
    mydb = mysql.connector.connect(
        host=host,  # 数据库主机地址
        user=user,  # 数据库用户名
        password=password,  # 数据库密码
        database=database  # 数据库名称
    )

    # 创建游标对象
    mycursor = mydb.cursor()

    try:
        # 读取Excel文件
        df = pd.read_excel(filename,dtype={'证券代码': str})
    except FileNotFoundError:
        print(f"文件 {filename} 不存在，已忽略。")
        return
    # 将日期时间类型的列转换为字符串类型
    for col in df.columns:  # 遍历DataFrame中的每一列
        print(f"Column Name: {col}")
        if col != '证券代码' and col != '证券简称':
            df[col] = df[col].str.replace(",", "") #df[col].replace(",", "")  # 打印出当前列的所有数据
            # print(df[col])#  打印一个空行以分隔不同的列

        # if df[col].dtype == 'datetime64[ns]':  # 如果该列的数据类型是日期时间类型
        #     df[col] = df[col].astype(str)  # 将该列的数据类型转换为字符串类型


    # 遍历Excel表格中的每一行，并将每一行插入到数据库中
    for row in df.itertuples(index=False):  # 遍历DataFrame中的每一行
        print(row)
        sql = f"INSERT INTO {table} (stat_date,stock_code,stock_name,rzmr,rzye,rqmc,rqyl,rqye,rzrqye) VALUES ('{stat_date}',%s, %s, %s, %s,%s, %s, %s, %s)"  # SQL插入语句
        # sql = "INSERT INTO " + table + "(stat_date,stock_code,stock_name,rzmr,rzye,rqmc,rqyl,rqye,rzrqye) VALUES (" + ss + ",%s, %s, %s, %s,%s, %s, %s, %s)"  # SQL插入语句
        print(sql)
        val = row  # 插入的数据
        mycursor.execute(sql, val)  # 执行SQL插入语句
        print("正在插入数据:", val)  # 输出正在插入的数据

    # 提交更改并关闭数据库连接
    mydb.commit()  # 提交更改
    mycursor.close()  # 关闭游标对象
    mydb.close()  # 关闭数据库连接


# 使用示例

host = "localhost"  # 数据库主机地址
user = "root"  # 数据库用户名
password = "123"  # 数据库密码
database = "z_sproot_series"  # 数据库名称
table = "stock_rzrq"  # 数据库表名

# 设定开始日期
stat_date = datetime(2024, 1, 2).date()
print(stat_date)
# 当前日期
current_date = datetime.now().date()
# 默认就是-- 格式，不需要格式化 formatted_date = current_date.strftime("%Y-%m-%d")  # 年-月-日
print("当前日期是:", current_date)

# 循环跳出的日期，当前日期加一天
one_day_later = current_date + timedelta(days=1)


filename_prex = r'D:\workspace\python_all\zz_download_file\rzrq\sz_'

# 开始循环处理
while stat_date < current_date:
    print('filename-- ' + filename_prex)
    # 如果是工作日，则开启下载
    if is_working_day(stat_date):
        print('today is working day ' + stat_date.strftime('%Y-%m-%d'))
        filename = filename_prex + stat_date.strftime('%Y-%m-%d')+'.xlsx'
        insert_excel_data_to_mysql(filename, host, user, password, database, table,stat_date)  # 调用函数，将Excel数据插入到MySQL数据库中
    stat_date = stat_date + timedelta(days=1)
      # Excel文件路径
print('下载完成')

